import axios from 'axios'
// import routers from '@/routers/index'
import {Notification} from 'element-ui'
import {getToken, removeRememberMeToken, removeToken} from "@/utils/auth";
// import {query} from "vue/src/platforms/web/util";
// import store from '../store'
// import Cookies from 'js-cookie'

// 创建axios实例
// TODO '/'省略了协议、ip、端口号，baseURL配置时需要区分生产环境和开发环境
const service = axios.create({
    baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/', // api 的 base_url
    timeout: 50000
})

// axios 的 request 拦截器
// TODO axios的拦截器本身无法对哪些请求进行拦截，也就是说axios的拦截器会拦截所有请求
service.interceptors.request.use(
    config => {
        if (getToken()) {
            config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
        }
        // if (getRememberMeToken()) {
        //     config.headers['RememberMeToken'] = getRememberMeToken()
        // }
        console.log(getToken())
        config.headers['Content-Type'] = 'application/json'
        console.log("请求拦截器正常:"+config.url)
        return config
    },
    error => {
        // TODO Promise对象是JS中内置的对象，用于处理 操作成功 和 操作失败 的回调函数
        console.log("请求拦截器异常")
        Promise.reject(error)
    }
)

// axios 的 response 拦截器
service.interceptors.response.use(
    // TODO 相应成功后，以下代码隐式返回了Promise对象
    response => {
        console.log("响应拦截器正常")
        return response.data
    },
    error => {
        console.log("响应拦截器异常")
        const errorMsg = error.response.data.message
        const code = error.response.data.status
        if (code === 401) {
            console.log("401")
            removeRememberMeToken()
            removeToken()
            location.reload()
        } else {
            console.log(code + " " + errorMsg)
            Notification({
                title: errorMsg,
                type: code
            });
        }
        return Promise.reject(error)
    }
)
export default service

